const Stack =  require('../../chapter-3/stack-sequence')

// 只要数据元素满足‘先进后出’的特新，就可以考虑使用栈

/**
 * 将输入的字符序列逆序输出
 * @param {*} str 
 */
function reverseStr(strArr) {
    const stack = new Stack(strArr.length)
    for (let item of strArr) {
        stack.push(item)
    }
    while (!stack.empty()) {
        console.log(stack.pop())
    }
}

// reverseStr('hello world'.split(''))

/**
 * 检验 表达式中的符号是否符合规则
 * 列：{([{}])} 符合规则
 * @param {*} strArr 
 */
function bracketMatching(strArr) {
    const stack = new Stack(strArr.length)
    for (let char of strArr) {
        if (char === '{' || char === '[' || char === '(') {
            stack.push(char)
        }
        if (char === '}' || char === ']' || char === ')') {
            if (stack.empty()) {
                console.log('表达式不符合规则:右括号多于左括号')
                return
            }
            let j = stack.pop()
            if ( (j === '{' && char !== '}') || (j === '[' && char !== ']') || (j === '(' && char !== ')') ) {
                console.log('表达式不符合规则:括号对应位置不匹配')
                return
            }
        }
    }
    if (!stack.empty()) {
        console.log('表达式不符合规则:左括号多于右括号')
        return
    }
    console.log('表达式符合规则')
}

bracketMatching('({[]}))'.split(''))